/**
 Gson_test  作用test
 Name       作用类格式封装
 name.json  作用传输数据
 */
package 第十七章_XML与JSON.JSON_GSON过滤自定义版;

import com.google.gson.stream.JsonReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;


public class Gson_test {
    public static void main(String[] args) {
        Gson_run();
    }

    //Gson_run处理生成对象和打印结果
    public static void Gson_run(){
        //1.路径丢字节流
        InputStream is=Thread.currentThread().getContextClassLoader()
                .getResourceAsStream("第十七章_XML与JSON/JSON_GSON过滤自定义版/name.json");
        //2.对象丢字符流
        InputStreamReader in=new InputStreamReader(is);
        //3.对象丢Json的字符编译器
        JsonReader reader=new JsonReader(in);
        //4.创建集合容器的对象
        ArrayList<Name> list=new ArrayList<>();
        //5.处理解析事务
        ClassParser(reader,list);
        //6.打印结果
        System.out.println(Arrays.toString(list.toArray()));
    }
    //ClassParser处理循环类名和装入集合容器中
    private static ArrayList<Name> ClassParser(JsonReader jsonReader,ArrayList<Name>list){
        try {
            //gson库 处理json数据 开始标记
            jsonReader.beginArray();
            //循环: josn处理器对象 如果有下个元素 就添加进 集合容器中
            while(jsonReader.hasNext()){
                list.add(parseName(jsonReader));
            }
            //gson库 处理json数据 结束标记
            jsonReader.endArray();
            return list;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    //paserName处理对象里面的属性
    private static Name parseName(JsonReader Json_reader){
        //Name封装格式 干活对象
        Name name=new Name();
        try {
            Json_reader.beginObject();
            while(Json_reader.hasNext()){
                //map容器的 key  设置key的统一化名 attrName   <- 不同的key 化名{fistname,lastname,email}
                String attrName=Json_reader.nextName();
                if("firstName".equals(attrName)){
                    //map容器的 value 设置 value 的值
                    name.setFirstName(Json_reader.nextString());
                }else if("lastName".equals(attrName)){
                    name.setLastName(Json_reader.nextString());
                }else if("email".equals(attrName)){
                    name.setEmail(Json_reader.nextString());
                }
            }
            Json_reader.endObject();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return name;
    }
}
